package coreUtils

import (
	"fmt"
	"log"
	"os"
	"path/filepath"
	"strings"

	"gitee.com/xgh2012/api-core/coreZapLog"
	"github.com/spf13/viper"
)

var (
	RuntimePath = "" //运行路径
)

func InitConfig(cmd string) {
	RuntimePath = GetCurrentDirectory()

	// 检查配置目录是否存在
	configDir := RuntimePath + "config_file"
	if _, err := os.Stat(configDir); os.IsNotExist(err) {
		log.Fatalf("配置目录不存在: %s", configDir)
	}

	// 加载 env.yaml 配置文件
	viper.SetConfigName("env")
	viper.SetConfigType("yaml")
	viper.AddConfigPath(configDir)
	if err := viper.ReadInConfig(); err != nil {
		log.Fatalf("读取env.yaml配置文件失败: %s", err)
	}

	// 合并 global.yaml 配置文件
	viper.SetConfigName("global")
	viper.SetConfigType("yaml")
	viper.AddConfigPath(configDir)
	if err := viper.MergeInConfig(); err != nil {
		log.Fatalf("读取global.yaml配置文件失败: %s", err)
	}

	// 验证必要的配置项
	serenv := viper.GetString("serenv")
	jifang := viper.GetString("jifang")
	if serenv == "" || jifang == "" {
		log.Fatalf("配置文件中缺少必要的serenv或jifang配置")
	}

	// 根据环境设置配置文件名称
	configFileName := fmt.Sprintf("%s_%s.yaml", serenv, jifang)
	openConfigDir := RuntimePath + "config_file/openconfig"

	// 检查环境配置目录是否存在
	if _, err := os.Stat(openConfigDir); os.IsNotExist(err) {
		log.Fatalf("环境配置目录不存在: %s", openConfigDir)
	}

	// 加载环境相关的配置文件
	viper.SetConfigName(configFileName) // 配置文件名 (带扩展名)
	viper.SetConfigType("yaml")         // 配置文件类型
	viper.AddConfigPath(openConfigDir)  // 配置文件路径

	if err := viper.MergeInConfig(); err != nil {
		log.Fatalf("读取环境配置文件%s失败: %s", configFileName, err)
	}

	// 将当前使用的配置文件名标记为 openConfig
	viper.Set("openConfig", configFileName)

	//初始化日志
	coreZapLog.InitLogger(cmd)
}

func GetCurrentDirectory() string {
	exePath, err := os.Executable()
	if err != nil {
		log.Printf("获取可执行文件路径失败:%+v \n", err.Error())
		panic(err)
	}
	exeDir := filepath.Dir(exePath)

	//将\替换成/
	return strings.Replace(exeDir, "\\", "/", -1) + "/"
}
